﻿using famails.App_Code.source.bus;
using famails.App_Code.source.dto;
using famails.bus;
using famails.common;
using famails.dto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace famails.BackEnd.Customer
{
    public partial class Customers : System.Web.UI.Page
    {
        static log4net.ILog logs = log4net.LogManager.GetLogger("ErrorRollingLogFileAppender");
        static UserLoginDTO userLogin = null;
        CM_CustomerBUS bus = new CM_CustomerBUS();
        public string birthday="";
        protected void Page_Load(object sender, EventArgs e)
        {
            userLogin = getUserLogin();
            if (!IsPostBack)
            {
                LoadData();
                if (Request.QueryString["id"] + "" != "")
                    Load4Edit();
            }
        }

        void Load4Edit()
        {

            decimal id = 0;
            decimal.TryParse(Request.QueryString["id"], out id);
            if (id > 0)
            {
                DataTable source = bus.GetByID(id, userLogin.UserId);
                if (source != null && source.Rows.Count > 0)
                {
                    hdfCustomerId.Value = id + "";
                    txtName.Text = source.Rows[0]["CustomerName"] + "";
                    txtAddress.Text = source.Rows[0]["Address"] + "";
                    txtBirthday_v.Value = source.Rows[0]["BirthDay"] + "" == "" ? "" : Convert.ToDateTime(source.Rows[0]["BirthDay"]).ToString("yyyy/MM/dd");
                    txtCompany.Text = source.Rows[0]["Company"] + "";
                    txtEmail.Text = source.Rows[0]["Email"] + "";
                    txtPhone.Text = source.Rows[0]["Phone"] + "";
                    drlGender.Text = source.Rows[0]["Sex"] + "";
                    drlGroup.SelectedValue = source.Rows[0]["GroupID"] + "";
                }

                if (source == null || source.Rows.Count == 0)
                {
                    pnError.Visible = true;
                    lblError.Text = "Dữ liệu không tồn tại";
                    return;
                }
            }
            if (id <= 0)
            {
                pnError.Visible = true;
                lblError.Text = "Dữ liệu không tồn tại";
                return;
            }
        }

        private UserLoginDTO getUserLogin()
        {
            if (Session["us-login"] != null)
            {
                return (UserLoginDTO)Session["us-login"];
            }
            else Response.Redirect("~");
            return null;
        }
        private void LoadData()
        {
            try
            {
                CM_GroupBUS ulBus = new CM_GroupBUS();
                DataTable table = ulBus.GetAll2Customer(getUserLogin().UserId);

                drlGroup.DataTextField = "GroupName";
                drlGroup.DataValueField = "GroupID";

                DataRow row = table.NewRow();
                row["GroupID"] = -1;
                row["GroupName"] = "Chọn nhóm khách hàng";
                table.Rows.InsertAt(row, 0);
                drlGroup.DataSource = table;
                drlGroup.DataBind();
            }
            catch (Exception ex)
            {

                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = " Đã xảy ra lỗi trong quá trình thực hiện. Vui lòng thử lại !<br/>" + ex.Message;
                logs.Error(userLogin.Username + "-Customer-Group - LoadData", ex);
            }
        }

        protected void btnRefesh_Click(object sender, EventArgs e)
        {
            decimal id = 0;
            decimal.TryParse(Request.QueryString["id"], out id);
            if (id == 0)
                txtAddress.Text = txtBirthday_v.Value = txtCompany.Text = txtEmail.Text = txtName.Text = txtPhone.Text = "";
            else Load4Edit();
            pnError.Visible = pnSuccess.Visible = false;
        }

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            pnError.Visible = false;
            pnSuccess.Visible = false;
            try
            {
                if (CheckBeforeSave())
                {
                    decimal id = 0;
                    decimal.TryParse(hdfCustomerId.Value, out id);
                    CM_CustomerDTO dto = new CM_CustomerDTO();
                    dto.CustomerID = id;
                    dto.CustomerName = txtName.Text;
                    dto.Phone = txtPhone.Text;
                    dto.Address = txtAddress.Text;
                    dto.BirthDay = convertStringToDate(txtBirthday_v.Value);
                    dto.Company = txtCompany.Text;
                    dto.Email = txtEmail.Text;
                    dto.Job = "";
                    dto.GroupID = int.Parse(drlGroup.SelectedValue);
                    dto.Sex = drlGender.SelectedValue;

                    if (id == 0)
                    {
                        dto.createBy = userLogin.UserId;
                        hdfCustomerId.Value= bus.Insert(dto)+"";
                        bus.DeleteCustomer(dto.Email, userLogin.UserId);
                        CM_CustomerCareAutoBUS CCABus = new CM_CustomerCareAutoBUS();
                        CCABus.addSendMailFromCustomerCareAutoByCustomer(Convert.ToDecimal(hdfCustomerId.Value), userLogin.UserId);
                    }
                    else bus.Edit(dto);

                    pnSuccess.Visible = true;
                    lblSuccess.Text = "Thêm mới thành công";
                    if (id > 0)
                        lblSuccess.Text = "Cập nhật thành công";
                }
            }
            catch (Exception ex)
            {
                logs.Error(userLogin.Username + "-Customer - btnAdd_Click", ex);
                pnError.Visible = true;
                lblError.Text = "Lưu dữ liệu không thành công!" + ex.Message.ToString();
            }
        }

        protected DateTime? convertStringToDate(string strDate)
        {
            try
            {
                int day = int.Parse(strDate.Substring(0, 2));
                int month = int.Parse(strDate.Substring(3, 2));
                int year = int.Parse(strDate.Substring(6, 4));
                DateTime dDate = new DateTime(year, month, day, 00, 00, 00);
                return dDate;
            }
            catch// (Exception ex)
            {
                //logs.Error(userLogin.Username + "-Client - btnAdd_Click", ex);
                //pnError.Visible = true;
                //lblError.Text = "Ngày sinh không hợp lệ!" + ex.Message.ToString();
            }
            return null;
        }
        bool CheckBeforeSave()
        {
            string errorMessage = "";
            if (txtName.Text == "")
                errorMessage = "Chưa nhập tên khách hàng";
            else if (txtEmail.Text == "")
                errorMessage = "Chưa nhập email khách hàng";
            else if (txtEmail.Text != "")
            {
                if (!EmailTools.IsEmail(txtEmail.Text)) errorMessage = "Email không đúng định dạng";
                else
                {
                    int id = 0;
                    int.TryParse(hdfCustomerId.Value, out id);
                    if (bus.CheckExistsEmail(txtEmail.Text, id, userLogin.UserId))
                        errorMessage = "Trùng email khách hàng";
                }
            }
            if (errorMessage.Length > 0)
            {
                pnError.Visible = true;
                lblError.Text = errorMessage;
                return false;
            }
            return true;
        }
    }
}